package com.zifuchuan.zuoye;

import java.util.Scanner;

/*
我国的居民身份证号码，由由十七位数字本体码和一位数字校验码组成。
请定义方法判断用户输入的身份证号码是否合法，并在主方法中调用方法测试结果。
规则为：号码为18位，不能以数字0开头，前17位只可以是数字，最后一位可以是数字或者大写字母X。

方法:
1、定义方法，返回值类型为boolean表示是否合法，参数列表为String类型的id，表示要判断的数据。
2、对每种不符合条件的情况作出判断
	2.1、如果字符串长度不是18，返回false。
    2.2、如果字符串以数字"0"开头，返回false。
    2.3、遍历字符串，获取每一位字符，判断前17位，如果不是数字，返回false，判断最后一位如果不是数字或者X，返回false
	2.4、所以的不符合条件都筛选完成，返回true
3、在主方法中创建键盘录入Scanner对象，调用nextLine()方法，获取用户输入，调用方法，传递参数，查看结果。
要多运行几次，判断各种不符合条件的数据。
 */
public class HomeWork06 {
    public static void main(String[] args) {
        //  创建键盘录入Scanner对象，调用nextLine()方法，
        //  获取用户输入，调用方法，传递参数，查看结果。
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入身份证号:");
        String ID = sc.nextLine();
        boolean check = check(ID);
        System.out.println(check);

    }

    // 定义方法，返回值类型为boolean表示是否合法，
    // 参数列表为String类型的id，表示要判断的数据。
    private static boolean check(String ID) {
        // 如果字符串长度不是18，返回false。
        if (ID == null) {
            return false;
            // 如果字符串长度不是18，返回false。
        } else if (ID.length() != 18) {
            return false;
            // 如果字符串以数字"0"开头，返回false。
        } else if (ID.startsWith("0")) {
            return false;
        }
//  遍历字符串，获取每一位字符，判断前17位，如果不是数字，返回false
        for (int i = 0; i < ID.length(); i++) {
            //  ID[I]
            char ch = ID.charAt(i);
            if (i == ID.length() - 1) {
             //   判断最后一位如果不是数字或者X，返回false
                if (ch >= 0 && ch <= 9 && ch != 'X') {
                    return false;
                } else
              //      所有的不符合条件都筛选完成，返回true
                    if (ch<0||ch>9){
            }
            }
        }
return true;
    }
}

